package com.practice.crud.controller;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.practice.crud.bean.Book;
import com.practice.crud.service.BookService;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

@Controller
@RequestMapping("/book")
public class BookController {

    @Autowired
    private BookService bookService;

//    // 实现分页功能
//    @RequestMapping("/getAll")
//    public String getAllByPage(@RequestParam(value = "pageNumber",defaultValue = "1") Integer pageNumber,Model model){
//        // 使用PageHelper分页插件，传入页码，以及每页的大小
//        PageHelper.startPage(pageNumber,4);
//        List<Book> allBooks = bookService.getAllBooks();
//        // 使用PageInfo包装查询后的结果，只需将pageInfo交给页面就好，传入连续显示的页数
//        PageInfo pageInfo = new PageInfo(allBooks,5);
//        model.addAttribute("pageInfo",pageInfo);
//        return "allBooks";
//    }


//    // 获取当前所有图书
//    @RequestMapping("/getAll")
//    public ModelAndView getAll(){
//        ModelAndView mav = new ModelAndView();
//        List<Book> allBooks = bookService.getAllBooks();
//        // 向请求域中共享数据
//        mav.addObject("books",allBooks);
//        // 设置视图，实现页面跳转
//        mav.setViewName("allBooks");
//        return mav;
//    }

    // 跳转到添加页面
    @RequestMapping("/toAddBookPage")
    public String toAddBookPage(){
        return "addPage";
    }

    // 添加图书
    @PostMapping("/addBook")
    public String addBook(Book book){
        bookService.addBook(book);
        return "redirect:/book/getAll";
    }

    // 删除图书
    @RequestMapping("/deleteBook/{bookID}")
    public String deleteBook(@PathVariable("bookID") Integer id){
        bookService.deleteBookById(id);
        return "redirect:/book/getAll";
    }

    // 跳转到修改页面
    @RequestMapping("/toUpdatePage/{id}")
    public String toUpdatePage(Model model,@PathVariable("id") Integer id){
        Book book = bookService.queryBookById(id);
        model.addAttribute("book",book);
        return "updatePage";
    }

    // 修改书籍
    @PostMapping("/updateBook")
    public String updateBook(Book book){
        bookService.updateBook(book);
        return "redirect:/book/getAll";
    }

    // 查询书籍
    @GetMapping("/getAll")
    public String queryBook(@ModelAttribute("message") String message,
                            @RequestParam(value = "pageNumber",defaultValue = "1") Integer pageNumber, Model model){
        // 使用PageHelper分页插件，告诉拦截器要执行分页操作，传入页码，以及每页的大小
        PageHelper.startPage(pageNumber,4);
        List<Book> bookList = bookService.queryBookBySearch(message);
        // 情况1：当未查询到图书时，还是展示所有图书信息，然后分页，并给出相应的提示信息
        if(bookList.isEmpty()){
            PageHelper.startPage(pageNumber,4);
            bookList = bookService.getAllBooks();
            model.addAttribute("errorMsg","抱歉，没有您需要的图书");
        }

        // 情况2：当未输入任何信息就查询时，还是展示所有图书信息，然后分页，并给出相应的提示信息
        // 这里在sql语句中判断
        /*if(message == null || message.trim().length() == 0){
            PageHelper.startPage(pageNumber,4);
            bookList = bookService.getAllBooks();
            model.addAttribute("errorMsg","搜索内容不能为空！");
        }*/
        // 使用PageInfo包装查询后的结果，只需将pageInfo交给页面就好，传入连续显示的页数
        PageInfo pageInfo = new PageInfo(bookList,5);
        model.addAttribute("pageInfo",pageInfo);
        return "allBooks";
    }
}
